【Steam VR 2.0】1.(Steam VR Input) SteamVR 2.0 新版输入系统的使用 手柄按键打印内容

您所在的位置:网站首页 vrchat 绑定steam 【Steam VR 2.0】1.(Steam VR Input) SteamVR 2.0 新版输入系统的使用 手柄按键打印内容

【Steam VR 2.0】1.(Steam VR Input) SteamVR 2.0 新版输入系统的使用 手柄按键打印内容

2023-08-27 07:15| 来源: 网络整理| 查看: 265

暂时VRTK还无法兼容Steam VR 2.X的版本,因此暂时放弃VRTK,先了解一下SteamVR 2.X如何使用

 

首先还是完成一个最简单的功能,按Trigger键打印一些东西,并引申到其他按键

 

对“新版”SteamVR input这个输入系统不太了解的朋友,可以先看看这篇文章

https://blog.csdn.net/lizhenxiqnmlgb/article/details/88566505

简单来说,出这个新版系统就是为了,一次开发,多硬件使用。因为不同硬件的物理按钮等各不相同,例如HTC vive和Oculus的手柄等按键都各不相同。有了新版输入系统,开发者不再需要区别按键是vive的Trigger还是Oculus的Grab,我们只需要在输入系统定义一个事件,类似开火Shoot,然后我们在开发过程中针对Shoot进行开发,后期和不同设备对接,只需要针对shoot对手柄按键进行映射即可。

目前官方为触控事件定义了如下几个类型

输入事件:

布尔就是一些按键,按钮的类型,类似Trigger

vec1,可以模拟一些按键的键程,类似你Trigger,勾了多少

vec2,触控板的二维信息

vec3,

pose

skeleton,关节信息,类似为了精确的手部模型,精确的抓握物体时用的

输出事件:

目前只有一种,就是震动

 

 

我使用的是Htc vive

那么开始代码,我使用的unity版本2019.4.2,  SteamVR 2.5.0

 

打开Windows-SteamVR Input窗口

测试使用default-InteractUI (因为和UI交互的按键,一般都会绑定Trigger)

 

新建场景,将[CameraRig]和[SteamVR]拖到场景中,并删除原相机

左右手柄依然在CameraRig下

每个手柄上都默认挂载着SteamVR_Behaviour_Pose脚本

 

下面我们新建一个脚本InputTest01.cs,挂载到场景任意物体上

using System.Collections; using System.Collections.Generic; using UnityEngine; using Valve.VR; public class InputTest01 : MonoBehaviour { public SteamVR_Action_Boolean action = SteamVR_Input.GetAction("InteractUI"); public SteamVR_Behaviour_Pose pose; // Update is called once per frame void Update() { if (action.GetStateDown(pose.inputSource)) { Debug.Log("ButtonDown"); } if (action.GetStateUp(pose.inputSource)) { Debug.Log("ButtonUp"); } if (action.GetState(pose.inputSource)) { Debug.Log("Button"); } //if (action.GetLastStateDown(pose.inputSource)) { // Debug.Log("ButtonDownLater"); //} } }

 为Pose赋值,这里要使用哪个手柄的按键,就将哪个手柄赋值给pose即可

运行结果

 

布尔型的交互事件,一共有三种监听(其实是六种),类似原Input系统的Button,ButtonDown和ButtonUp事件。

而另一种GetLastStateDown(也是对应三种),会在原事件执行后执行。

GetStateDown和GetLastStateDown,会先执行GetStateDown事件然后执行GetLastStateDown

 

下面我们创建一个自定义事件,remoter(遥控器),采用Vector2类型的,来获取手指放在touch Pad的二维坐标

在SteamVR input中添加remoter如下图

 

然后点击右下角按钮Open binding UI

点击编辑

可以看见,窗口中已经提示有按键未绑定

我们在左侧选择触控板,点击“位置”,为其赋值为我们创建的remoter(“an remoter”就是我们在unity中添加的描述)

绑定完成后,回到Unity

在脚本中添加如下代码

首先获取到我们刚刚写的remoter

public SteamVR_Action_Vector2 remoter = SteamVR_Input.GetAction("remoter");

然后在Update中打印内容

//只要手放在触控板上,即可触发 if (remoter.GetChanged(pose.inputSource)) { //获取手指在触控板的坐标位置 Debug.Log("Axis=" + remoter.GetAxis(pose.inputSource)+ " || Axis Delta=" + remoter.GetAxisDelta(pose.inputSource)); }

运行时,手触摸触控板(注意,你的pose拖拽的哪个手柄,哪个手柄的触控板才可触发),可以看到打印结果

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3